package org.apache.hadoop.hdfs.protocolPB;

import org.apache.hadoop.classification.InterfaceAudience;
import org.apache.hadoop.classification.InterfaceStability;
import org.apache.hadoop.hdfs.DFSConfigKeys;
import org.apache.hadoop.hdfs.protocol.HdfsConstants;
import org.apache.hadoop.hdfs.protocol.proto.ClientNamenodeProtocolProtos.ClientNamenodeProtocol;
import org.apache.hadoop.hdfs.security.token.delegation.DelegationTokenSelector;
import org.apache.hadoop.ipc.ProtocolInfo;
import org.apache.hadoop.security.KerberosInfo;
import org.apache.hadoop.security.token.TokenInfo;


@InterfaceAudience.Private
@InterfaceStability.Stable
@KerberosInfo( serverPrincipal = DFSConfigKeys.DFS_NAMENODE_KERBEROS_PRINCIPAL_KEY)
@TokenInfo(DelegationTokenSelector.class)
@ProtocolInfo(protocolName = HdfsConstants.CLIENT_NAMENODE_PROTOCOL_NAME,  protocolVersion = 1)
/**
 * ClientProtocol是HDFS客户端与名字节点之间的接口，但是在RPC调用中，RPC方法的参数和返回值都必须是可序列化的，
 * 所以HDFS定义了一个新的ClientNamenodeProtocolPB协议对ClientProtocol协议中方法的参数和返回值进行包装。
 *
 * ClientNamenodeProtocolPB协议定义的方法与ClientProtocol一样，但是参数和返回值却是使用protobuf序列化后的格式，
 * 这样ClientNamenodeProtocolPB请求就可以通过网络传输。
 * 为了便于理解，大家可以把ClientNamenodeProtocolPB理解为使用protobuf定义参数和返回值的ClientProtocol协议。
 */
public interface ClientNamenodeProtocolPB extends  ClientNamenodeProtocol.BlockingInterface {
}
